home *** CD-ROM | disk | FTP | other *** search
/ HTBasic 9.3 / HTBasic 9.3.iso / 93win / data1.cab / Basic_Plus_Examples / STNGEDIT < prev    next >
Encoding:
Text File  |  2005-03-02  |  6.9 KB  |  200 lines

  1. 10    ! ******************************************************************
  2. 20    ! Example: STRING Editor
  3. 30    !
  4. 40    ! This program demonstrates the use of the STRING widget as a text
  5. 50    ! editor when in MULTILINE mode.
  6. 60    !
  7. 70    ! This program does not do much error-checking. A practical program
  8. 80    ! should include more error-checking.
  9. 90    !
  10. 100   ! ******************************************************************
  11. 110   !
  12. 120   ! Variables Definitions:
  13. 130   !
  14. 140   !   S$:      General-purpose string
  15. 150   !   Search:  Text search string
  16. 160   !   F$:      File string
  17. 170   !   N:       General-purpose variable
  18. 180   !   Btn:     Returns button value from dialogs
  19. 190   !
  20. 200       DIM S$[256],Search$[256],F$[128]
  21. 210       INTEGER N,Btn
  22. 220       INTEGER Cursor,D(1:4)
  23. 230   !
  24. 240   ! Widget dimensions
  25. 250   !
  26. 260       INTEGER Pw,Ph,Px,Py,Iw,Ih,Sw,Sh,Sx,Sy
  27. 270   !
  28. 280   ! Variables for display scaling
  29. 290   !
  30. 300       INTEGER Dw,Dh
  31. 310   !
  32. 320   ! Get display size
  33. 330   !
  34. 340       GESCAPE CRT,3;D(*)
  35. 350       Dw=D(3)-D(1)
  36. 360       Dh=D(4)-D(2)
  37. 370       CLEAR SCREEN
  38. 380   !
  39. 390       Pw=Dw*.7      ! PANEL width
  40. 400       Ph=Dh*.7      ! PANEL height
  41. 410       Px=(Dw-Pw)/2  ! Center PANEL
  42. 420       Py=(Dh-Ph)/2
  43. 430   !
  44. 440   ! Create PANEL for STRING widget
  45. 450   !
  46. 460       ASSIGN @Main TO WIDGET "PANEL";SET ("VISIBLE":0)
  47. 470       CONTROL @Main;SET ("X":Px,"Y":Py,"WIDTH":Pw,"HEIGHT":Ph)
  48. 480       CONTROL @Main;SET ("TITLE":" Example: String Editor")
  49. 490       CONTROL @Main;SET ("RESIZABLE":0,"SIZE CONTROL":"RESIZE CHILDREN")
  50. 500       CONTROL @Main;SET ("SYSTEM MENU":"Quit")
  51. 510   !
  52. 520   ! Build "File" menu
  53. 530   !
  54. 540       ASSIGN @File TO WIDGET "PULLDOWN MENU";PARENT @Main
  55. 550       CONTROL @File;SET ("LABEL":"File ")
  56. 560   !
  57. 570       ASSIGN @New TO WIDGET "MENU BUTTON";PARENT @File
  58. 580       CONTROL @New;SET ("LABEL":"New")
  59. 590       ASSIGN @Openfile TO WIDGET "MENU BUTTON";PARENT @File
  60. 600       CONTROL @Openfile;SET ("LABEL":"Open...")
  61. 610       ASSIGN @Savefile TO WIDGET "MENU BUTTON";PARENT @File
  62. 620       CONTROL @Savefile;SET ("LABEL":"Save")
  63. 630       ASSIGN @Merge TO WIDGET "MENU BUTTON";PARENT @File
  64. 640       CONTROL @Merge;SET ("LABEL":"Merge...")
  65. 650   !
  66. 660       ASSIGN @S1 TO WIDGET "MENU SEPARATOR";PARENT @File
  67. 670   !
  68. 680       ASSIGN @Quit TO WIDGET "MENU BUTTON";PARENT @File
  69. 690       CONTROL @Quit;SET ("LABEL":"Quit")
  70. 700   !
  71. 710   ! Build "Edit" menu
  72. 720   !
  73. 730       ASSIGN @Edit TO WIDGET "PULLDOWN MENU";PARENT @Main
  74. 740       CONTROL @Edit;SET ("LABEL":"Edit")
  75. 750   !
  76. 760       ASSIGN @Cut TO WIDGET "MENU BUTTON";PARENT @Edit
  77. 770       CONTROL @Cut;SET ("LABEL":"Cut")
  78. 780       ASSIGN @Copytext TO WIDGET "MENU BUTTON";PARENT @Edit
  79. 790       CONTROL @Copytext;SET ("LABEL":"Copy")
  80. 800       ASSIGN @Paste TO WIDGET "MENU BUTTON";PARENT @Edit
  81. 810       CONTROL @Paste;SET ("LABEL":"Paste")
  82. 820       ASSIGN @Replace TO WIDGET "MENU BUTTON";PARENT @Edit
  83. 830       CONTROL @Replace;SET ("LABEL":"Replace")
  84. 840   !
  85. 850       ASSIGN @S2 TO WIDGET "MENU SEPARATOR";PARENT @Edit
  86. 860   !
  87. 870       ASSIGN @Findline TO WIDGET "MENU BUTTON";PARENT @Edit
  88. 880       CONTROL @Findline;SET ("LABEL":"Line Number...")
  89. 890       ASSIGN @Findstr TO WIDGET "MENU BUTTON";PARENT @Edit
  90. 900       CONTROL @Findstr;SET ("LABEL":"String...")
  91. 910   !
  92. 920   ! Create and size STRING widget, set MULTILINE operation
  93. 930   !
  94. 940       ASSIGN @S TO WIDGET "STRING";PARENT @Main
  95. 950       STATUS @Main;RETURN ("INSIDE WIDTH":Iw,"INSIDE HEIGHT":Ih)
  96. 960       CONTROL @S;SET ("X":0,"Y":0,"WIDTH":Iw,"HEIGHT":Ih)
  97. 970       CONTROL @S;SET ("MULTILINE":1,"SCROLLBARS":1)
  98. 980   !
  99. 990   ! Set events
  100. 1000  !
  101. 1010       ON ERROR GOSUB Errtrap
  102. 1020  !
  103. 1030       ON EVENT @New,"ACTIVATED" GOSUB Newtext
  104. 1040       ON EVENT @Openfile,"ACTIVATED" GOSUB Getfile
  105. 1050       ON EVENT @Savefile,"ACTIVATED" GOSUB Savefile
  106. 1060       ON EVENT @Merge,"ACTIVATED" GOSUB Mergetext
  107. 1070       ON EVENT @Cut,"ACTIVATED" GOSUB Cut
  108. 1080       ON EVENT @Copytext,"ACTIVATED" GOSUB Copytext
  109. 1090       ON EVENT @Paste,"ACTIVATED" GOSUB Paste
  110. 1100       ON EVENT @Replace,"ACTIVATED" GOSUB Replace
  111. 1110       ON EVENT @Findline,"ACTIVATED" GOSUB Findline
  112. 1120       ON EVENT @Findstr,"ACTIVATED" GOSUB Findstr
  113. 1130  !
  114. 1140       ON EVENT @Quit,"ACTIVATED" GOTO Finis
  115. 1150       ON EVENT @Main,"SYSTEM MENU" GOTO Finis
  116. 1160  !
  117. 1170       CONTROL @Main;SET ("VISIBLE":1)
  118. 1180  !
  119. 1190  ! Loop and wait for input
  120. 1200  !
  121. 1210       LOOP
  122. 1220           WAIT FOR EVENT
  123. 1230       END LOOP
  124. 1240       STOP
  125. 1250  !
  126. 1260  ! ******** End of Main Program **********************
  127. 1270  !
  128. 1280  ! Error handler -- it flag errors and then bypasses the
  129. 1290  ! incorrect statement.
  130. 1300  !
  131. 1310  Errtrap:!
  132. 1320       DIALOG "ERROR",ERRM$
  133. 1330       ERROR RETURN
  134. 1340  !
  135. 1350  ! ******** Edit Routines ***************************
  136. 1360  !
  137. 1370  Newtext:!
  138. 1380       STATUS @S;RETURN ("TEXT LENGTH":N)
  139. 1390       IF N>0 THEN
  140. 1400           DIALOG "QUESTION","Do you want to clear the text?",Btn
  141. 1410           IF Btn=0 THEN CONTROL @S;SET ("VALUE":"")
  142. 1420       END IF
  143. 1430       RETURN
  144. 1440  !
  145. 1450  Getfile:!
  146. 1460       DIALOG "FILE","File to edit?",Btn;RETURN ("SELECTION":F$)
  147. 1470       IF Btn=0 THEN CONTROL @S;SET ("VALUE":"","READ FILE":FNValid_name$(F$))
  148. 1480       RETURN
  149. 1490  !
  150. 1500  Savefile:!
  151. 1510       DIALOG "FILE","Write to file?",Btn;RETURN ("SELECTION":F$)
  152. 1520       IF Btn=0 THEN CONTROL @S;SET ("WRITE FILE":FNValid_name$(F$))
  153. 1530       RETURN
  154. 1540  !
  155. 1550  Mergetext:!
  156. 1560       DIALOG "FILE","File to merge?",Btn;RETURN ("SELECTION":F$)
  157. 1570       IF Btn=0 THEN CONTROL @S;SET ("READ FILE":FNValid_name$(F$))
  158. 1580       RETURN
  159. 1590  !
  160. 1600  Cut:!
  161. 1610       CONTROL @S;SET ("CUT SELECTION":1)
  162. 1620       RETURN
  163. 1630  !
  164. 1640  Copytext:!
  165. 1650       CONTROL @S;SET ("COPY SELECTION":1)
  166. 1660       RETURN
  167. 1670  !
  168. 1680  Paste:!
  169. 1690       CONTROL @S;SET ("PASTE":1)
  170. 1700       RETURN
  171. 1710  !
  172. 1720  Replace:!
  173. 1730       CONTROL @S;SET ("DELETE SELECTION":1,"PASTE":1)
  174. 1740       RETURN
  175. 1750  !
  176. 1760  Findline:!
  177. 1770       S$="Go to what line?"
  178. 1780       T$="SHORT INTEGER"
  179. 1790       DIALOG "NUMBER",S$,Btn;SET ("FORMAT":T$),RETURN ("VALUE":N)
  180. 1800       IF Btn=0 THEN CONTROL @S;SET ("LINE NUMBER":N)
  181. 1810       RETURN
  182. 1820  !
  183. 1830  Findstr:!
  184. 1840       S$="Search for what text?"
  185. 1850       DIALOG "STRING",S$,Btn;RETURN ("VALUE":Search$)
  186. 1860       IF Btn=0 AND Search$<>"" THEN CONTROL @S;SET ("SEARCH":Search$)
  187. 1870       RETURN
  188. 1880  !
  189. 1890  Finis:!
  190. 1900       ASSIGN @Main TO *! Deletes PANEL widget
  191. 1910       CLEAR SCREEN
  192. 1920       END
  193. 1930  !
  194. 1940       DEF FNValid_name$(F$)
  195. 1950           INTEGER Colon_pos
  196. 1960           IF POS(SYSTEM$("VERSION:OS"),"HP-UX") THEN Colon_pos=POS(F$,":")
  197. 1970           IF NOT Colon_pos THEN Colon_pos=LEN(F$)+1
  198. 1980           RETURN F$[1,Colon_pos-1]
  199. 1990       FNEND
  200.